#!/bin/sh
#
# Copyright The OpenZipkin Authors
# SPDX-License-Identifier: Apache-2.0
#

# ENTRYPOINT script that starts Zipkin
set -eu

STORAGE_TYPE=${STORAGE_TYPE:-mem}

# Configure the Docker HEALTHCHECK
export HEALTHCHECK_PORT=${QUERY_PORT:-9411}

if [ "${STORAGE_TYPE}" = "mem" ]; then
  # When using in-memory provider, allocate 160m, most of which for trace storage
  JAVA_OPTS=${JAVA_OPTS:-"-Xms160m -Xmx160m -XX:+ExitOnOutOfMemoryError"}
fi

# MODULE_OPTS is not set in the zipkin-slim dist, so use it to detect if this is a slim build
if [ -z "${MODULE_OPTS+x}" ]; then
  # Allocate less memory when using the slim build
  JAVA_OPTS=${JAVA_OPTS:-"-Xms64m -Xmx64m -XX:+ExitOnOutOfMemoryError"}

  # Use main class directly if there are no modules, as it measured 14% faster from JVM running to
  # available verses PropertiesLauncher when using Zipkin was based on Spring Boot 2.1
  exec java ${JAVA_OPTS} -cp '.:BOOT-INF/lib/*:BOOT-INF/classes' zipkin.server.ZipkinServer "$@"
else
  JAVA_OPTS=${JAVA_OPTS:-"-Xms96m -Xmx96m -XX:+ExitOnOutOfMemoryError"}

  # Disable Log4j2 JMX extensions when running the full build
  exec java ${MODULE_OPTS} ${JAVA_OPTS} -cp . \
  -Dlog4j2.disable.jmx=true \
  org.springframework.boot.loader.launch.PropertiesLauncher "$@"
fi
